/**
 * @file preprocess.h
 * @brief 音频预处理模块头文件
 */

#ifndef PREPROCESS_H
#define PREPROCESS_H

/**
 * @brief 预处理配置结构体
 */
typedef struct {
    int low_cut_freq;    // 高通滤波截止频率，单位Hz
    int high_cut_freq;   // 低通滤波截止频率，单位Hz
    int window_type;     // 窗函数类型，0=矩形窗，1=汉宁窗，2=汉明窗，3=布莱克曼窗
} PreprocessConfig;

/**
 * @brief 预处理窗类型
 */
typedef enum {
    WINDOW_RECT = 0,     // 矩形窗
    WINDOW_HANNING = 1,  // 汉宁窗
    WINDOW_HAMMING = 2,  // 汉明窗
    WINDOW_BLACKMAN = 3  // 布莱克曼窗
} WindowType;

/**
 * @brief 音频预处理函数
 * 
 * 对输入音频进行预处理，包括:
 * 1. 归一化处理
 * 2. 带通滤波(20Hz-16000Hz)
 * 3. 窗函数处理
 * 
 * @param audio 输入音频帧数据，处理后的结果也存放在此
 * @param length 音频帧长度
 * @param config 预处理配置
 * @return int 成功返回0，失败返回错误码
 */
int preprocess_audio(float* audio, int length, PreprocessConfig* config);

/**
 * @brief 获取默认的预处理配置
 * 
 * @param sample_rate 采样率
 * @return PreprocessConfig 默认配置
 */
PreprocessConfig get_default_preprocess_config(int sample_rate);

#endif /* PREPROCESS_H */ 